LVMを使ってみたかったのでEC2とEBSでやってみた
どうも。CX事業本部Delivery部のえーたん(@eetann092)です。
最近LVM(Logical Volume Manager)の存在を知って試したくなったため、EBSとEC2を使って素振りしました。
本記事は、以下の記事を参考に適度に寄り道した素振りの記録です。
本記事で作成したボリュームグループ(Volume Group)の構成は以下です。
EC2インスタンスの起動
今回使うEC2インスタンスの起動の設定ではEBSボリュームを2つ追加しました。
インスタンスが起動できたら、インスタンスの詳細画面の「接続」ボタンから、お好みの方法でインスタンスに接続します。
情報の確認
以降はインスタンスに接続後の操作です。
まず、最初の時点でのボリュームグループ(volume group)、物理ボリューム(physical volume)、論理ボリューム(logical volume)の確認をします。何も操作していないため、3つとも何も表示されません。
sudo su - vgs pvs lvs
マニュアルを開くとvgs produces formatted output about VGs
と書かれているため、vgs
,pvs
,lvs
のs
は複数形を表しているのかな、と筆者は予想しています。
続いて、ブロックデバイスの一覧を表示します。今回扱うのは/dev/xvdb
、/dev/xvdc
の2つです。
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT xvda 202:0 0 8G 0 disk └─xvda1 202:1 0 8G 0 part / xvdb 202:16 0 8G 0 disk xvdc 202:32 0 8G 0 disk
追加したボリュームのデバイス名は、「ストレージ」のタブから確認できます。
上記で確認したデバイス名は/dev/sdb
と/dev/sdc
でしたが、本記事ではそのシンボリックリンク先の/dev/xvdb
、/dev/xvdc
を使いました。
以下、/dev/xvdb
と/dev/xvdc
の両方で操作が同じ場合は片方だけ書きます。
せっかくなので、parted
で確認します(gdisk -l /dev/xvdc
でもできます)。まだ何も操作していないため、パーティションテーブルはunknownです。
parted /dev/xvdc print
Error: /dev/xvdc: unrecognised disk label Model: Xen Virtual Block Device (xvd) Disk /dev/xvdc: 8590MB Sector size (logical/physical): 512B/512B Partition Table: unknown Disk Flags:
パーティションの作成
パーティションを作成します。
gdisk /dev/xvdc
まず、何も無いねと言われます。
GPT fdisk (gdisk) version 0.8.10 Partition table scan: MBR: not present BSD: not present APM: not present GPT: not present Creating new GPT entries.
パーティションの新規作成では、Hex codeは8e00
(Linux LVM)を指定します。
Command (? for help): n Partition number (1-128, default 1): First sector (34-16777182, default = 2048) or {+-}size{KMGTP}: Last sector (2048-16777182, default = 16777182) or {+-}size{KMGTP}: Current type is 'Linux filesystem' Hex code or GUID (L to show codes, Enter = 8300): 8e00 Changed type of partition to 'Linux LVM'
確認後、書き込みます。
Command (? for help): p Disk /dev/xvdc: 16777216 sectors, 8.0 GiB Logical sector size: 512 bytes Disk identifier (GUID): B7D400C3-D601-485B-BF71-24A87EEB2F38 Partition table holds up to 128 entries First usable sector is 34, last usable sector is 16777182 Partitions will be aligned on 2048-sector boundaries Total free space is 2014 sectors (1007.0 KiB) Number Start (sector) End (sector) Size Code Name 1 2048 16777182 8.0 GiB 8E00 Linux LVM
Command (? for help): w Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING PARTITIONS!! Do you want to proceed? (Y/N): Y OK; writing new GUID partition table (GPT) to /dev/xvdc. The operation has completed successfully.
もう一度lsblk
を実行すると、パーティションxvdb1
、xvdc1
が作成されていることが確認できます。
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT xvda 202:0 0 8G 0 disk └─xvda1 202:1 0 8G 0 part / xvdb 202:16 0 8G 0 disk └─xvdb1 202:17 0 8G 0 part xvdc 202:32 0 8G 0 disk └─xvdc1 202:33 0 8G 0 part
parted
を実行すると、Name列がLinux LVM
、Flags列がlvm
になっています。
parted /dev/xvdc print
Model: Xen Virtual Block Device (xvd) Disk /dev/xvdc: 8590MB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 8590MB 8589MB Linux LVM lvm
物理ボリュームの作成
物理ボリューム(physical volume)を作成します。
pvcreate /dev/xvdc1
Physical volume "/dev/xvdc1" successfully created.
物理ボリューム一覧を見ると、/dev/sdb1
と/dev/sdc1
として登録されています。
pvs
PV VG Fmt Attr PSize PFree /dev/sdb1 lvm2 --- <8.00g <8.00g /dev/sdc1 lvm2 --- <8.00g <8.00g
詳細も見てみます。
pvdisplay
"/dev/sdb1" is a new physical volume of "<8.00 GiB" --- NEW Physical volume --- PV Name /dev/sdb1 VG Name PV Size <8.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID yhS7uN-bebl-wKG1-rRkE-FMs5-XVT4-uZZSPb "/dev/sdc1" is a new physical volume of "<8.00 GiB" --- NEW Physical volume --- PV Name /dev/sdc1 VG Name PV Size <8.00 GiB Allocatable NO PE Size 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID zf6pPJ-nHme-Odbh-VwMW-ZkqS-hvXu-6VH5aS
まだボリュームグループに割り当てていないため、Allocatable
はNO
、PE
(physical extent)は0
です。
ボリュームグループの作成
ボリュームグループexample-group
を作成します。最初に割り当てる物理ボリュームは/dev/xvdb1
にします。
vgcreate example-group /dev/xvdb1
Volume group "example-group" successfully created
中身を確認します。
vgdisplay
--- Volume group --- VG Name example-group System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 1 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 1 Act PV 1 VG Size <8.00 GiB PE Size 4.00 MiB Total PE 2047 Alloc PE / Size 0 / 0 Free PE / Size 2047 / <8.00 GiB VG UUID KtJR3f-BorE-5gTf-jwha-9dn0-Pe5Q-cLZwzf
物理ボリュームの数が1、サイズは8.00 GiB未満(2047 x 4.00 / 1024 ≒ 7.99 GiB)であることが分かります。
/dev/xvdc1
もボリュームグループへ追加します。
vgextend example-group /dev/xvdc1
Volume group "example-group" successfully extended
もう一度ボリュームグループを確認すると、物理ボリュームの数やサイズ(VG Size)や使用できるPE(Free PE / Size)が増えていることが分かります。
vgdisplay
--- Volume group --- VG Name example-group System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 2 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 2 Act PV 2 VG Size 15.99 GiB PE Size 4.00 MiB Total PE 4094 Alloc PE / Size 0 / 0 Free PE / Size 4094 / 15.99 GiB VG UUID KtJR3f-BorE-5gTf-jwha-9dn0-Pe5Q-cLZwzf
ただし、まだ論理ボリューム(logical volume)の数は0のままです。
論理ボリュームの作成
「12GiBの論理ボリュームlv-12g
」をボリュームグループexample-group
の中に作成します。
lvcreate --size 12G --name lv-12g example-group
Logical volume "lv-12g" created.
「2GiBの論理ボリュームlv-2g
」も作成します。
lvcreate --size 2G --name lv-2g example-group
Logical volume "lv-2g" created.
詳細を確認すると、パスが/dev/example-group/lv-12g
と/dev/example-group/lv-2g
に割り当てられたことが分かります。
lvdisplay
--- Logical volume --- LV Path /dev/example-group/lv-12g LV Name lv-12g VG Name example-group LV UUID QcpDK6-syZA-7htj-fzvN-7nHN-u4AZ-DPjwjy LV Write Access read/write LV Creation host, time ip-172-31-37-52.ap-northeast-1.compute.internal, 2022-12-11 07:25:02 +0000 LV Status available # open 0 LV Size 12.00 GiB Current LE 3072 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:0 --- Logical volume --- LV Path /dev/example-group/lv-2g LV Name lv-2g VG Name example-group LV UUID SjEDG8-3t8s-dy6R-IrXw-l3He-3fHN-FIoAey LV Write Access read/write LV Creation host, time ip-172-31-37-52.ap-northeast-1.compute.internal, 2022-12-11 07:25:12 +0000 LV Status available # open 0 LV Size 2.00 GiB Current LE 512 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:1
ボリュームグループを確認すると、割り当てられたPE(Alloc PE / Size)が増え、余ったPE(Free PE / Size)が減っていることが分かります。
vgdisplay
--- Volume group --- VG Name example-group System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 6 VG Access read/write VG Status resizable MAX LV 0 Cur LV 2 Open LV 0 Max PV 0 Cur PV 2 Act PV 2 VG Size 15.99 GiB PE Size 4.00 MiB Total PE 4094 Alloc PE / Size 3584 / 14.00 GiB Free PE / Size 510 / 1.99 GiB VG UUID KtJR3f-BorE-5gTf-jwha-9dn0-Pe5Q-cLZwzf
これで、冒頭に載せた構成は完成です。
ファイルシステムの作成
先程確認したパスを指定して、ファイルシステムを作成、適当にマウントします。
mkfs -t ext4 /dev/example-group/lv-12g mkfs -t ext4 /dev/example-group/lv-2g mkdir /example mkdir /example/12g /example/2g mount /dev/example-group/lv-12g /example/12g mount /dev/example-group/lv-2g /example/2g
論理ボリュームの削除
素振りがしたいだけだったので、残念ですが論理ボリュームlv-2g
とはここでお別れです。アンマウントしてから論理ボリュームを削除します。
umount /example/2g/ lvremove example-group/lv-2g
Do you really want to remove active logical volume example-group/lv-2g? [y/n]: y Logical volume "lv-2g" successfully removed
ボリュームグループを確認すると、論理ボリュームと割り当てられたPE(Alloc PE / Size)が減っています。その代わり、余っているPE(Free PE / Size)が増えました。
vgdisplay
--- Volume group --- VG Name example-group System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 7 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 1 Max PV 0 Cur PV 2 Act PV 2 VG Size 15.99 GiB PE Size 4.00 MiB Total PE 4094 Alloc PE / Size 3072 / 12.00 GiB Free PE / Size 1022 / 3.99 GiB VG UUID KtJR3f-BorE-5gTf-jwha-9dn0-Pe5Q-cLZwzf
論理ボリュームの拡張
せっかくなので余ったPEを論理ボリュームlv-12g
に割り当てます。resizefs
オプションを使って、ファイルシステムのサイズも合わせて拡張しておきます。
lvresize --extents +1022 --resizefs --verbose example-group/lv-12g
趣味でverbose
オプションをつけて出力が長くなったため、折りたたみの中に書いておきました。
クリックで展開できます
Executing: /usr/sbin/fsadm --verbose check /dev/example-group/lv-12g fsadm: "ext4" filesystem found on "/dev/mapper/example--group-lv--12g". fsadm: Skipping filesystem check for device "/dev/mapper/example--group-lv--12g" as the filesystem is mounted on /example/12g /usr/sbin/fsadm failed: 3 Archiving volume group "example-group" metadata (seqno 11). Extending logical volume example-group/lv-12g to 15.99 GiB Size of logical volume example-group/lv-12g changed from 12.00 GiB (3072 extents) to 15.99 GiB (4094 extents). Loading table for example--group-lv--12g (253:0). Suspending example--group-lv--12g (253:0) with device flush Resuming example--group-lv--12g (253:0). Creating volume group backup "/etc/lvm/backup/example-group" (seqno 12). Logical volume example-group/lv-12g successfully resized. Executing: /usr/sbin/fsadm --verbose resize /dev/example-group/lv-12g 16769024K fsadm: "ext4" filesystem found on "/dev/mapper/example--group-lv--12g". fsadm: Device "/dev/mapper/example--group-lv--12g" size is 17171480576 bytes fsadm: Parsing tune2fs -l "/dev/mapper/example--group-lv--12g" fsadm: Resizing filesystem on device "/dev/mapper/example--group-lv--12g" to 17171480576 bytes (3145728 -> 4192256 blocks of 4096 bytes) fsadm: Executing resize2fs /dev/mapper/example--group-lv--12g 4192256 resize2fs 1.42.9 (28-Dec-2013) Filesystem at /dev/mapper/example--group-lv--12g is mounted on /example/12g; on-line resizing required old_desc_blocks = 2, new_desc_blocks = 2 The filesystem on /dev/mapper/example--group-lv--12g is now 4192256 blocks long.
余っているPE(Free PE / Size)が0になりました。
vgdisplay
--- Volume group --- VG Name example-group System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 8 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 1 Max PV 0 Cur PV 2 Act PV 2 VG Size 15.99 GiB PE Size 4.00 MiB Total PE 4094 Alloc PE / Size 4094 / 15.99 GiB Free PE / Size 0 / 0 VG UUID KtJR3f-BorE-5gTf-jwha-9dn0-Pe5Q-cLZwzf
最後にもう一度ブロックデバイスの一覧を表示すると、論理ボリュームのデバイスも表示されます。
lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT xvda 202:0 0 8G 0 disk └─xvda1 202:1 0 8G 0 part / xvdb 202:16 0 8G 0 disk └─xvdb1 202:17 0 8G 0 part └─example--group-lv--12g 253:0 0 16G 0 lvm /example/12g xvdc 202:32 0 8G 0 disk └─xvdc1 202:33 0 8G 0 part └─example--group-lv--12g 253:0 0 16G 0 lvm /example/12g
最後に
本記事では載せませんでしたが、manコマンドでマニュアルを見るとLVM関連のコマンドのオプションは豊富であることが分かります。また、EXAMPLES
セクションにはたくさんの例が、SEE ALSO
セクションにはたくさんの関連コマンドが載っているので、ぜひ読んでみてください。
試し終わったら、使用したリソースの停止や削除を忘れないようにしましょう。